package schame使用xsd;

/*
我们将使用基于Java的XSD验证器来针对students.xsd验证文件：students.xml。

文件：students.xml
<?xml version = "1.0"?>

<class>  
   <student rollno = "1010">
      <firstname>Dinkar</firstname>    
      <lastname>King</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>     
   </student>

   <student rollno = "1020">     
      <firstname>Vaneet</firstname>
      <lastname>Su</lastname>
      <nickname>Vaneet</nickname>
      <marks>95</marks>
   </student>

   <student rollno = "1030">    
      <firstname>Jasvir</firstname>
      <lastname>Lee</lastname>
      <nickname>Jasvir</nickname>
      <marks>90</marks>
   </student>
</class>

文件：students.xsd
<?xml version = "1.0"?>

<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   <xs:element name = 'class'>
      <xs:complexType>
         <xs:sequence>
             <xs:element name = 'student' type = 'StudentType' minOccurs = '0' maxOccurs = 'unbounded' />
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <xs:complexType name = "StudentType">
      <xs:sequence>
         <xs:element name = "firstname" type = "xs:string"/>
         <xs:element name = "lastname" type = "xs:string"/>
         <xs:element name = "nickname" type = "xs:string"/>
         <xs:element name = "marks" type = "xs:positiveInteger"/>
      </xs:sequence>
      <xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
   </xs:complexType>
</xs:schema>

文件：XSDValidator.java
*/
import java.io.File;
import java.io.IOException;

import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;

import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.xml.sax.SAXException;

//验证file-name.xml对file-name.xsd是否有效
public class java使用xsd {
   public static void main(String[] args) {
      if(args.length !=2){
         System.out.println("Usage : XSDValidator <file-name.xsd> <file-name.xml>" );
      } else {
         boolean isValid = validateXMLSchema(args[0],args[1]);

         if(isValid){
            System.out.println(args[1] + " is valid against " + args[0]);
         } else {
            System.out.println(args[1] + " is not valid against " + args[0]);
         }
      }
   }

   public static boolean validateXMLSchema(String xsdPath, String xmlPath){
      try {
         SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);//
         Schema schema = factory.newSchema(new File(xsdPath));
         Validator validator = schema.newValidator();
         validator.validate(new StreamSource(new File(xmlPath)));
      } catch (IOException e){
         System.out.println("Exception: "+e.getMessage());//文件不存在等IOException
         return false;
      }catch(SAXException e1){
         System.out.println("SAX Exception: "+e1.getMessage());//xml与xsd匹配异常
         return false;
      }

      return true;

   }
}
/*
针对XSD验证XML的步骤
将XSDValidator.java文件复制到一个工作目录位置，例如：D:\worksp\xsd，将students.xml 和students.xsd 这两个文件复制到相同的工作目录位
置(D:\worksp\xsd)。打开命令行控制台编译XSDValidator.java，确保在计算机上安装了JDK 1.5以及类路径。 有关如何使用JAVA的详细信息，请参阅JAVA教程。
D:\worksp\xsd>javac XSDValidator.java
Shell
执行XSDValidator，并将students.xsd和students.xml这两个文件名称作为参数传递。输出结果如下所示 ：
D:\worksp\xsd>java XSDValidator students.xsd students.xml
students.xml is valid against students.xsd 即：students.xml对students.xsd有效
//更多请阅读：https://www.yiibai.com/xsd/xsd_validation.html#article-start
*/
